Android Material Design:Palette优化界面色彩搭配

目录

什么是Palette

Palette是调色板的意思它可以通过提取Bitmap中的颜色来优化界面的色彩搭配。

Palette的使用方法

导入依赖

1
2
3
4
dependencies {
...
implementation 'com.android.support:palette-v7:27.1.1'
}

核心方法(传入bitmap)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// 获取到柔和的深色的颜色(可传默认值)
palette.getDarkMutedColor(Color.BLUE);
// 获取到活跃的深色的颜色(可传默认值)
palette.getDarkVibrantColor(Color.BLUE);
// 获取到柔和的明亮的颜色(可传默认值)
palette.getLightMutedColor(Color.BLUE);
// 获取到活跃的明亮的颜色(可传默认值)
palette.getLightVibrantColor(Color.BLUE);
// 获取图片中最活跃的颜色(也可以说整个图片出现最多的颜色)(可传默认值)
palette.getVibrantColor(Color.BLUE);
// 获取图片中一个最柔和的颜色(可传默认值)
palette.getMutedColor(Color.BLUE);
}
});

案例演示

这里使用的是Toolbar+TabLayout+ViewPager结合实现的一个效果

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
private void setPaletteColor(int position) {
Bitmap bitmap = bitmaps.get(position);
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant = palette.getVibrantSwatch();//获取颜色样本。在这里做了非空判断,如果获取的颜色样本为空就从所有的样本中获取一个样本。
if (vibrant == null) {
for (Palette.Swatch swatch : palette.getSwatches()) {
vibrant = swatch;
break;
}
}
// 这样获取的颜色可以进行改变。
int rgb = vibrant.getRgb();//从样本中获取颜色的RGB值。获取到RGB值之后可以直接给其他控件使用这个值,或者稍微调整这个值的颜色再使用。
tablayout.setBackgroundColor(rgb);
toolbar.setBackgroundColor(rgb);
if (Build.VERSION.SDK_INT > 21) {
Window window = getWindow();
//状态栏改变颜色。
int color = changeColor(rgb);
window.setStatusBarColor(color);
}

}
});
}
/**
* @method changeColor
* @description 修改状态栏颜色
* @date: 2018/9/17 11:33
* @author: LML
* @param rgb 颜色值参数
* @return int
*/
private int changeColor(int rgb) {
int red = rgb >> 16 & 0xFF;
int green = rgb >> 8 & 0xFF;
int blue = rgb & 0xFF;
red = (int) Math.floor(red * (1 - 0.2));
green = (int) Math.floor(green * (1 - 0.2));
blue = (int) Math.floor(blue * (1 - 0.2));
return Color.rgb(red, green, blue);
}

案例源码地址:https://github.com/myml666/PalettesDemo

坚持原创技术分享,您的支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------